package com.jl.basicframework.model.bo;

import androidx.databinding.BaseObservable;

import com.jl.basicframework.annotation.ValueNotNull;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/***
 * 作者:姜澜
 * 时间:2022/3/8
 * 邮箱:316879104@pp.com
 * 类简述:
 */
public class BaseBo extends BaseObservable {
    /**
     * 模型错误信息
     */
    protected String errorMsg;

    /**
     * 验证类属性是否为空
     */
    public boolean validate() {
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            ValueNotNull valueNotNull = field.getAnnotation(ValueNotNull.class);
            if (valueNotNull != null) {
                try {
                    Method method =this.getClass().getMethod("get" + getMethodName(field.getName()));
                    Object obj = method.invoke(this);
                    if (null==obj){
                        errorMsg = valueNotNull.message();
                    }
                    return false;

                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 把一个字符串的第一个字母大写
     */
    private String getMethodName(String fieldName) throws Exception {
        byte[] items = fieldName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    @Override
    public String toString() {
        return "BaseBO{" +
                "errorMsg='" + errorMsg + '\'' +
                '}';
    }
}
